#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/wait.h>
pid_t ppid;

void error_print_usage(const char *progname, int st) {

    if (st == EXIT_FAILURE) {
        printf("\
Proba %s -h para máis información.\n\
", progname);

        exit(st);
    } else {
        printf("Halluda!!\n");
        exit(st);
    }
}


void CreaProcesos(int np) {
	pid_t pid;
	int i, status;
	char mensaxe[500];

	for (i=0;i<np;i++) { //np = número de procesos a crear
		pid=fork();
		if (pid < 0) { //error
			break;
		}
		else {
			if (pid == 0) {
				mensaxe[0] = '\0';
				sprintf(mensaxe, "[%d, pid %d]", i+1,getpid());
				write (STDOUT_FILENO,mensaxe,strlen(mensaxe));
				//sleep(random()%10);
				exit(256);
			}
			else {
			printf("\n");

			}
		}
	}

	for (i=0;i<np;i++) {
		sprintf(mensaxe, "termino el hijo %u con status %d\n",wait(NULL), WEXITSTATUS(&status));
		write(STDOUT_FILENO,mensaxe,strlen(mensaxe));
	}

	
}



int main(int argc, char *argv[]) {
	int veces;
	int lectores;
	int i;
	ppid = getpid();
	const char* progname = argv[0];
	char mensaxe[500];
	
	if (argc == 5) {
		if ((strcmp(argv[1], "-l") == 0) && (strcmp(argv[3], "-times") == 0)) {
			lectores = atoi(argv[2]);
			veces = atoi(argv[4]);
			printf("lectores %d veces %d\n", lectores, veces);
			sprintf(mensaxe,"Creados %d lectores proceso padre %d\n", lectores, ppid);
			write (STDOUT_FILENO,mensaxe,strlen(mensaxe));
		} else {
			error_print_usage(progname, EXIT_FAILURE);
		}
	}
	else {
		error_print_usage(progname, EXIT_FAILURE);
    }
    CreaProcesos(lectores);
}
